package gui.profesor;

import gui.curso.PanelCurso;
import gui.estudiante.DialogoEstudiantesPorCurso;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableRowSorter;

import modelo.ModeloCursoPorProfesor;
import modelo.ModeloEstudiantesPorCurso;

public class PanelProfesor extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel panelTableProfesor = null;
	private JScrollPane jspProfesor = null;
	private JTable tblProfesor = null;
	private JPanel panelBuscar = null;
	private JLabel lblBuscar = null;
	private JComboBox cmbBuscar = null;
	private JTextField txtBuscar = null;
	private ModeloCursoPorProfesor modeloCursoPorProfesor = null;
	private int indiceComboBuscar = 0;
	private JCheckBox checkBoxActivo = null;
	private JCheckBox checkBoxInactivo = null;
	private JCheckBox checkBoxTodosCursos = null;
	private JButton btnVerListaEstudiante = null;
	private static PanelProfesor instancia = null;

	private static String nombreCurso = null;

	/**
	 * This is the default constructor
	 */

	public static PanelProfesor getInstancia() {
		if (instancia == null) {
			instancia = new PanelProfesor();
		}
		return instancia;
	}

	public PanelProfesor() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		modeloCursoPorProfesor = ModeloCursoPorProfesor.getInstancia();
		this.setSize(884, 378);
		this.setLayout(null);
		this.add(getPanelTableProfesor(), null);
		this.add(getPanelBuscar(), null);
		this.add(getCheckBoxActivo(), null);
		this.add(getCheckBoxInactivo(), null);
		this.add(getCheckBoxTodosCursos(), null);
		this.add(getBtnVerListaEstudiante(), null);
	}

	/**
	 * This method initializes panelTableCiclo
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelTableProfesor() {
		if (panelTableProfesor == null) {
			panelTableProfesor = new JPanel();
			panelTableProfesor.setLayout(null);
			panelTableProfesor.setBounds(new Rectangle(6, 90, 871, 227));
			panelTableProfesor.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.gray, 1),
					"Lista Cursos", TitledBorder.LEFT,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 14), new Color(51, 51, 51)));
			panelTableProfesor.add(getJspProfesor(), null);
		}
		return panelTableProfesor;
	}

	/**
	 * This method initializes jspCiclo
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspProfesor() {
		if (jspProfesor == null) {
			jspProfesor = new JScrollPane();
			jspProfesor.setBounds(new Rectangle(12, 25, 850, 185));
			jspProfesor.setViewportView(getTblProfesor());
		}
		return jspProfesor;
	}

	/**
	 * This method initializes tblCiclo
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblProfesor() {
		if (tblProfesor == null) {
			tblProfesor = new JTable(modeloCursoPorProfesor);
		}
		return tblProfesor;
	}

	/**
	 * This method initializes panelBuscar
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBuscar() {
		if (panelBuscar == null) {
			lblBuscar = new JLabel();
			lblBuscar.setBounds(new Rectangle(10, 21, 55, 23));
			lblBuscar.setText("Buscar:");
			panelBuscar = new JPanel();
			panelBuscar.setLayout(null);
			panelBuscar.setBounds(new Rectangle(255, 18, 445, 58));
			panelBuscar.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.black, 1), "Busqueda",
					TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("SansSerif",
							Font.PLAIN, 12), Color.black));
			panelBuscar.add(lblBuscar, null);
			panelBuscar.add(getCmbBuscar(), null);
			panelBuscar.add(getTxtBuscar(), null);
		}
		return panelBuscar;
	}

	/**
	 * This method initializes cmbBuscar
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getCmbBuscar() {
		if (cmbBuscar == null) {
			cmbBuscar = new JComboBox();
			cmbBuscar.setBounds(new Rectangle(67, 21, 151, 23));
			cmbBuscar.setModel(new DefaultComboBoxModel(new String[] {
					"ID Curso", "Nombre", "Empleado", "Aula" }));
			cmbBuscar.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					indiceComboBuscar = cmbBuscar.getSelectedIndex();
				}
			});
		}
		return cmbBuscar;
	}

	/**
	 * This method initializes txtBuscar
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTxtBuscar() {
		if (txtBuscar == null) {
			txtBuscar = new JTextField();
			txtBuscar.setBounds(new Rectangle(221, 21, 210, 23));
			txtBuscar.addKeyListener(new java.awt.event.KeyAdapter() {
				public void keyReleased(java.awt.event.KeyEvent e) {
					if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
						getTxtBuscar().setText("");
					}
					TableRowSorter<ModeloCursoPorProfesor> sorter = new TableRowSorter<ModeloCursoPorProfesor>(
							modeloCursoPorProfesor);
					tblProfesor.setRowSorter(sorter);
					sorter.setRowFilter(RowFilter.regexFilter("(?i)"
							.concat(getTxtBuscar().getText()),
							indiceComboBuscar));
				}
			});

		}
		return txtBuscar;
	}

	/**
	 * This method initializes checkBoxActivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxActivo() {
		if (checkBoxActivo == null) {
			checkBoxActivo = new JCheckBox();
			checkBoxActivo.setBounds(new Rectangle(709, 20, 131, 23));
			checkBoxActivo.setText("Cursos Activos");
			checkBoxActivo.setName("ACTIVO");
			checkBoxActivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxActivo.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxTodosCursos.setSelected(false);
								modeloCursoPorProfesor
										.actualizarTableParametros(checkBoxActivo
												.getName());
							}
						}
					});
		}
		return checkBoxActivo;
	}

	/**
	 * This method initializes checkBoxInactivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxInactivo() {
		if (checkBoxInactivo == null) {
			checkBoxInactivo = new JCheckBox();
			checkBoxInactivo.setBounds(new Rectangle(709, 39, 131, 23));
			checkBoxInactivo.setText("Cursos Inactivos");
			checkBoxInactivo.setName("INACTIVO");
			checkBoxInactivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxInactivo.isSelected() == true) {
								checkBoxActivo.setSelected(false);
								checkBoxTodosCursos.setSelected(false);
								modeloCursoPorProfesor
										.actualizarTableParametros(checkBoxInactivo
												.getName());
							}
						}
					});
		}
		return checkBoxInactivo;
	}

	/**
	 * This method initializes checkBoxTodosCursos
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxTodosCursos() {
		if (checkBoxTodosCursos == null) {
			checkBoxTodosCursos = new JCheckBox();
			checkBoxTodosCursos.setBounds(new Rectangle(709, 58, 131, 23));
			checkBoxTodosCursos.setText("Todos los Cursos");
			checkBoxTodosCursos.setName("TODOS");
			checkBoxTodosCursos
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxTodosCursos.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxActivo.setSelected(false);
								modeloCursoPorProfesor
										.actualizarTableParametros(checkBoxTodosCursos
												.getName());
							}
						}
					});
		}
		return checkBoxTodosCursos;
	}

	/**
	 * This method initializes btnVerListaEstudiante
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnVerListaEstudiante() {
		if (btnVerListaEstudiante == null) {
			btnVerListaEstudiante = new JButton();
			btnVerListaEstudiante.setBounds(new Rectangle(348, 330, 193, 33));
			btnVerListaEstudiante.setText("Ver Lista de Estudiantes");
			btnVerListaEstudiante.setIcon(new ImageIcon("./lib/images/list.png"));
			btnVerListaEstudiante
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (tblProfesor.isRowSelected(tblProfesor
									.getSelectedRow()) == false) {
								JOptionPane
										.showMessageDialog(
												null,
												"<hmtl>Debe de Seleccionar un curso para<br> ver la lista de estudiantes</html>",
												"Error",
												JOptionPane.ERROR_MESSAGE);
							} else {
								int id = Integer
										.parseInt(tblProfesor
												.getValueAt(
														tblProfesor
																.getSelectedRow(),
														0).toString());

								PanelCurso.setIdCurso(id);

								ModeloEstudiantesPorCurso
										.setParametro("ACTIVO");
								ModeloEstudiantesPorCurso.getInstancia()
										.actualizarTableParametros(
												ModeloEstudiantesPorCurso
														.getParametro());
								DialogoEstudiantesPorCurso dialgoEstudiantesPorCurso = DialogoEstudiantesPorCurso
										.getInstancia();
								dialgoEstudiantesPorCurso.setVisible(true);

							}
						}
					});
		}
		return btnVerListaEstudiante;
	}

	public static String getNombreCurso() {
		return nombreCurso;
	}

	public static void setNombreCurso(String nombreCurso) {
		PanelProfesor.nombreCurso = nombreCurso;
	}
}
